package akaram.foxinfire.voladora;

import java.util.*;
import java.io.*;
import java.lang.*;

public class Voladora
{

	/*
	 * Partes de la voladora
	 *
	 */
	static Estructura estructura;
	static MotorElevacion motorelevacion;
	static MotorImpulsion motorimpulsion;
	static Cabina cabina;
	static Eyector eyector;
	static Giroscopo giroscopo;
	static DeflectorLateral lateral;
	static DeflectorChoque choque;
	static Estabilizadores estabilizador;
	static Computadora computadora;
	static Reactor reactor;
	static Casco casco;
	static Faros faros;	

	public static void main( String args[] )
	{
		try
		{
			System.out.println( "Intentando abrir 'voladora.txt'" );

			Properties valores = new Properties();
			valores.load( new FileInputStream("voladora.txt") );
			System.out.println( "-----------------------------------" );
			System.out.println( "Voladora:" );
			System.out.println( );
		
			/* Creamos los elementos de la voladora */
			String strpeso = valores.getProperty("total.peso","100.0");
			System.out.println( "Peso Total: " + strpeso );

			/* Estructura */
			float pesoTotal = Float.parseFloat( strpeso );
			float pesoRestante = pesoTotal;
			float potenciaUsada = (float)0.0;
			float precioTotal = (float)0.0;
			estructura = new Estructura( pesoTotal );
			pesoRestante -= estructura.peso();
			potenciaUsada += estructura.potencia();
			System.out.println( estructura.descripcion() );

			/* Motor Elevacion */			
			motorelevacion = new MotorElevacion( "Lady Tech",
						Integer.parseInt( valores.getProperty("elevacion.altura", "3") ),
						Integer.parseInt( valores.getProperty("elevacion.aceleracion", "1") ),
						pesoTotal,
						Float.parseFloat( valores.getProperty("elevacion.mejora", "1.0") ) );
			System.out.println( motorelevacion.descripcion() );
			pesoRestante -= motorelevacion.peso();
			potenciaUsada += motorelevacion.potencia();
			precioTotal += motorelevacion.precio();

			/* Motor Impulsion */			
			motorimpulsion = new MotorImpulsion( "ImpGen",
						Integer.parseInt( valores.getProperty("impulsion.velocidad", "3") ),
						Integer.parseInt( valores.getProperty("impulsion.aceleracion", "1") ),
						pesoTotal,
						Float.parseFloat( valores.getProperty("impulsion.mejora", "1.0") ) );
			System.out.println( motorimpulsion.descripcion() );
			pesoRestante -= motorimpulsion.peso();
			potenciaUsada += motorimpulsion.potencia();
			precioTotal += motorimpulsion.precio();


			/* Cabina */			
			cabina = new Cabina( Integer.parseInt( valores.getProperty("cabina.tipo", "1") ) );
			System.out.println( cabina.descripcion() );
			pesoRestante -= cabina.peso();
			potenciaUsada += cabina.potencia();
			precioTotal += cabina.precio();

			/* Eyector */	
			if ( valores.getProperty("eyector", "no").equals("si") )
			{		
				eyector = new Eyector();
				System.out.println( eyector.descripcion() );
				pesoRestante -= eyector.peso();
				potenciaUsada += eyector.potencia();
				precioTotal += eyector.precio();
			}

			/* Giroscopos */
			int numGiroscopos = Integer.parseInt( valores.getProperty("giroscopo.numero", "0") );			
			giroscopo= new Giroscopo( "Imperial Gyros",
						numGiroscopos,
						pesoTotal,
						Float.parseFloat( valores.getProperty("giroscopo.mejora", "1.0") ) );
			System.out.println( giroscopo.descripcion() );
			pesoRestante -= giroscopo.peso();
			potenciaUsada += giroscopo.potencia()*numGiroscopos;
			precioTotal += giroscopo.precio()*numGiroscopos;

			/* Deflector Lateral */
			int manLat = Integer.parseInt( valores.getProperty("lateral.maniobra", "0") );	
			if ( manLat != 0 )
			{		
				lateral = new DeflectorLateral ( "Volstog",
						manLat,
						pesoTotal,
						Float.parseFloat( valores.getProperty("lateral.mejora", "1.0") ) );
				System.out.println( lateral.descripcion() );
				pesoRestante -= lateral.peso();
				potenciaUsada += lateral.potencia();
				precioTotal += lateral.precio();
			}
			
			/* Deflector Choque */
			int frenada = Integer.parseInt( valores.getProperty("choque.frenada", "0") );	
			if ( frenada != 0 )
			{		
				choque = new DeflectorChoque ( "Miners",
						frenada,
						pesoTotal,
						Float.parseFloat( valores.getProperty("choque.mejora", "1.0") ) );
				System.out.println( choque.descripcion() );
				pesoRestante -= choque.peso();
				potenciaUsada += choque.potencia();
				precioTotal += choque.precio();
			}

			/* Estabilizadores */
			int manEst = Integer.parseInt( valores.getProperty("estabilizador.maniobra", "0") );	
			if ( manEst != 0 )
			{		
				estabilizador = new Estabilizadores ( "Gulbll",
						Integer.parseInt( valores.getProperty("impulsion.velocidad", "3") ),
						Integer.parseInt( valores.getProperty("impulsion.aceleracion", "1") ),
						manEst,
						pesoTotal,
						Float.parseFloat( valores.getProperty("estabilizador.mejora", "1.0") ) );
				System.out.println( estabilizador.descripcion() );
				pesoRestante -= estabilizador.peso();
				potenciaUsada += estabilizador.potencia();
				precioTotal += estabilizador.precio();
			}

			/* Computadora */	
			computadora = new Computadora( "Softar",
						Integer.parseInt( valores.getProperty("impulsion.velocidad", "3") ),
						Integer.parseInt( valores.getProperty("elevacion.altura", "3") ),
						numGiroscopos,
						Integer.parseInt( valores.getProperty("computadora.extras", "30") ),
						pesoTotal,
						Float.parseFloat( valores.getProperty("impulsion.mejora", "1.0") ) );
			System.out.println( computadora.descripcion() );
			pesoRestante -= computadora.peso();
			potenciaUsada += computadora.potencia();
			precioTotal += computadora.precio();

			/* Faros */	
			faros = new Faros( Integer.parseInt( valores.getProperty("faros.numero", "6") ),
					   Integer.parseInt( valores.getProperty("faros.resistencia", "0") )
					 );
			System.out.println( faros.descripcion() );
			pesoRestante -= faros.peso();
			potenciaUsada += faros.potencia();
			precioTotal += faros.precio();

			/* Casco */	
			casco = new Casco ( Integer.parseInt( valores.getProperty("casco.resistencia", "3") ) );
			System.out.println( casco.descripcion() );
			pesoRestante -= casco.peso();
			potenciaUsada += casco.potencia();
			precioTotal += casco.precio();


			/* Potencia requerida */
			System.out.println( "Potencia Requerida: " + potenciaUsada );

			/* Reactor */
			reactor = new Reactor( "ImpGen",
						potenciaUsada,
						Float.parseFloat( valores.getProperty("impulsion.mejora", "1.0") ) );
			System.out.println( reactor.descripcion() );
			pesoRestante -= computadora.peso();
			precioTotal += computadora.precio();


			/* Peso restante */
			System.out.println( "Peso Sobrante: " + pesoRestante + " Kg");
	
			/* Precio Total */
			System.out.println( "Precio Total: " + precioTotal + " Cr");
		
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
}